package ycl.scheduled.common.exception;

import com.alibaba.fastjson.JSONException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import ycl.scheduled.common.ApiResult;

/**
 * 异常统一处理
 *
 * @author: YCL
 * @date: 2021-06-11 13:45:27
 */
@Slf4j
@RestControllerAdvice
public class ExceptionInterception {

	/**
	 * 系统逻辑异常
	 *
	 * @param e 异常
	 * @return 统一返回值
	 */
	@ExceptionHandler(Exception.class)
	public ApiResult<Object> systemException(Exception e) {
		log.error(e.getMessage(), e);
		return ApiResult.fail("系统异常");
	}


	/**
	 * 前端传参异常
	 *
	 * @param e 异常
	 * @return 统一返回值
	 */
	@ExceptionHandler(JSONException.class)
	public ApiResult<Object> jsonException(JSONException e) {
		return ApiResult.fail("传参异常");
	}

	/**
	 * 已知异常(如 Assert 里抛出的异常)
	 *
	 * @param e 异常
	 * @return 统一返回值
	 */
	@ExceptionHandler(IllegalArgumentException.class)
	public ApiResult<Object> illegalArgumentException(IllegalArgumentException e) {
		return ApiResult.fail(e.getMessage());
	}

// 目前无法捕获只可在yml里设置
//	/**
//	 * 文件过大
//	 *
//	 * @param e
//	 * @return
//	 */
//	@ExceptionHandler(MaxUploadSizeExceededException.class)
//	public ApiResult<Object> maxUploadSizeExceededException(MaxUploadSizeExceededException e) {
//		return ApiResult.fail("文件过大无法上传");
//	}


}
